﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using orienta.Models;
using orienta.Utils;
using orienta.ViewModels;
using orienta.Helper;
using System.Collections;

namespace orienta.Controllers
{ 
    public class DependenciasController : Controller
    {
        private GoodTireEntities db = new GoodTireEntities();
        public int _ID_COMPENDIO_TIPO_REGION = 319;
        public int _ID_REGION_LIMA = 16;

        //
        // GET: /Dependencias/

        public ViewResult Index()
        {
            var orimaedependencia = db.ORIMaeDependencia.Include("ORIDetCompendio").Include("ORIMaeDependencia2").Include("ORIMaeDependencia3");
            return View(orimaedependencia.ToList());
        }

        public ViewResult ListTree()
        {
            //var orimaedependencia = db.ORIMaeDependencia.Include("ORIDetCompendio").Include("ORIMaeDependencia2").Include("ORIMaeDependencia3");
            //return View(orimaedependencia.ToList());
            var orimaecompendio = db.ORIMaeCompendio.Include("ORIMaeUsuario");
            //ViewBag.tituloPopup = Request["tituloCompendio"];
            DependenciaHelper helper = new DependenciaHelper();
            return View(helper.getDetalleDependenciaDescList(1));
        }


       

        public ViewResult ListTreePopup()
        {
            var orimaecompendio = db.ORIMaeCompendio.Include("ORIMaeUsuario");
            DependenciaHelper helper = new DependenciaHelper();
            int CodRegion =  Convert.ToInt32(Request["nIdeDepRegion"].ToString());
            return View(helper.getDetalleDependenciaRegionDescList(CodRegion));
        }

        public ViewResult ListTreeRegionPopup()
        {
            HtmlUtils htmlUtils = new HtmlUtils();
            var orimaecompendio = db.ORIMaeCompendio.Include("ORIMaeUsuario");
            ViewBag.DepRegion = htmlUtils.getComboDependenciaRegion();
            DependenciaHelper helper = new DependenciaHelper();
            int CodRegion = 0;
            if (!string.IsNullOrEmpty(Request["nIdeDepRegion"]))
            {
                CodRegion = Convert.ToInt32(Request["nIdeDepRegion"].ToString());
            }
            else {
                if (User.Identity.Name != null) {
                    String[] arr = User.Identity.Name.Split('@');
                    string idregion = arr[5];
                    CodRegion = Convert.ToInt32(idregion);
                }
            }
            if (CodRegion==0) {
                CodRegion = _ID_REGION_LIMA;
            }
            return View(helper.getDetalleDependenciaRegionDescList(CodRegion));      
        }

        //
        // GET: /Dependencias/Details/5

        public ViewResult Details(decimal id)
        {
            ORIMaeDependencia orimaedependencia = db.ORIMaeDependencia.Single(o => o.nIdeDep == id);
            return View(orimaedependencia);
        }

        //
        // GET: /Dependencias/Create

        public ActionResult Create(decimal? id)
        {
            string idDep = Request["iddep"];
            if (!string.IsNullOrEmpty(idDep))
            {
                //Edicion de la dependencia
                int intIdDep = Int32.Parse(idDep);
                ORIMaeDependencia orimaedependencia = db.ORIMaeDependencia.Single(o => o.nIdeDep == intIdDep);

                HtmlUtils htmlUtils = new HtmlUtils();
                DependenciaHelper helper = new DependenciaHelper();
                ViewBag.nIdeTipoDep = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento");
                ViewBag.nIdeDepPadre = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
                //ViewBag.nIdeDepRegion = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
                ViewBag.CategoriaDependencia = htmlUtils.getComboCategoriaDependencia();
                ViewBag.DepRegion = htmlUtils.getComboDependenciaRegion();
                ViewBag.IdDep = intIdDep;
                var list = new SelectList(new[]
                                      {
                                          new{ID="1",Name="SI"},
                                          new{ID="0",Name="NO"},
                                      }, "ID", "Name", "S");
                ViewBag.List = list;

                Dependencia vmDependencia = new Dependencia();
                //vmDependencia.nIdeDepPadre = orimaedependencia.nIdeDepPadre;
                vmDependencia.nIdeTipo = Int32.Parse(orimaedependencia.nIdeTipoDep.ToString());
                vmDependencia.sDescripcion = orimaedependencia.vDescripcion;
                vmDependencia.nIdeDepRegion = orimaedependencia.nIdeDepRegion;
                if (!string.IsNullOrEmpty(orimaedependencia.nIdeDepPadre.ToString())) {
                    int intIdDepPadre = Int32.Parse(orimaedependencia.nIdeDepPadre.ToString());
                    ORIMaeDependencia orimaedependenciaPadre = db.ORIMaeDependencia.Single(o => o.nIdeDep == intIdDepPadre);
                    vmDependencia.depPadre = orimaedependenciaPadre.vDescripcion + "<" + orimaedependencia.nIdeDepPadre.ToString() + "-A>";
                }
                vmDependencia.nIdeDepPadre = orimaedependencia.nIdeDepPadre.ToString();
                vmDependencia.nCodigo =  Int64.Parse(orimaedependencia.nCodDep.ToString());
                vmDependencia.sSiglas = orimaedependencia.vSigDep;
                vmDependencia.nSeleccion = Int32.Parse(orimaedependencia.vBanSel.ToString());
                if (!string.IsNullOrEmpty(orimaedependencia.dtFecIniVig.ToString())) {
                    vmDependencia.dtFecInic = String.Format("{0:dd/MM/yyyy}", orimaedependencia.dtFecIniVig);
                }
                if (!string.IsNullOrEmpty(orimaedependencia.dtFecFinVig.ToString()))
                {
                    vmDependencia.dtFecFin = String.Format("{0:dd/MM/yyyy}", orimaedependencia.dtFecFinVig);
                }
                ViewBag.Mensaje = ViewBag.Mensaje;
                ViewBag.idDepRegion = vmDependencia.nIdeDepRegion;
                return View(vmDependencia);
            } else {
                HtmlUtils htmlUtils = new HtmlUtils();
                DependenciaHelper helper = new DependenciaHelper();
                ViewBag.nIdeTipoDep = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento");
                ViewBag.nIdeDepPadre = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
                ViewBag.nIdeDepRegion = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
                ViewBag.CategoriaDependencia = htmlUtils.getComboCategoriaDependencia();
                ViewBag.DepRegion = htmlUtils.getComboDependenciaRegion();
                var list = new SelectList(new[]
                                      {
                                          new{ID="1",Name="SI"},
                                          new{ID="0",Name="NO"},
                                      }, "ID", "Name", "S");
                ViewBag.List = list;
                if (id == 1) {
                    ViewBag.Mensaje = "Dependencia Satisfactoriamente ingresada.";
                }
                else if (id == 2)
                {
                    ViewBag.Mensaje = "Dependencia Satisfactoriamente actualizada.";
                }
                return View();
            }
            

            
        }

        public ActionResult newDependencia()
        {
            HtmlUtils htmlUtils = new HtmlUtils();
            DependenciaHelper helper = new DependenciaHelper();
            ViewBag.nIdeTipoDep = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento");
            ViewBag.nIdeDepPadre = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
            ViewBag.nIdeDepRegion = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
            ViewBag.CategoriaDependencia = htmlUtils.getComboCategoriaDependencia();
            ViewBag.DepRegion = htmlUtils.getComboDependenciaRegion();
            var list = new SelectList(new[]
                                      {
                                          new{ID="1",Name="SI"},
                                          new{ID="0",Name="NO"},
                                      }, "ID", "Name", "S");
            ViewBag.List = list;
            
            
            return View();
        }


        //
        // POST: /Dependencias/Create

        [HttpPost]
        public ActionResult Create(Dependencia dependenciaview)
        {
            ORIMaeDependencia orimaedependencia = new ORIMaeDependencia();
            if (ModelState.IsValid)
            {

                orimaedependencia.nIdeTipoDep = dependenciaview.nIdeTipo;
                orimaedependencia.vDescripcion = dependenciaview.sDescripcion;
                orimaedependencia.nIdeDepRegion = dependenciaview.nIdeDepRegion;
                if (dependenciaview.nIdeDepPadre != null) {
                    String idDepPadre = dependenciaview.nIdeDepPadre;
                    int limiteGuion = idDepPadre.LastIndexOf('-');
                    if (limiteGuion > 0)
                    {
                        String sIdDep = idDepPadre.Substring(0, limiteGuion);
                        orimaedependencia.nIdeDepPadre = Convert.ToInt32(sIdDep);
                    }
                    else {
                        String sIdDep = idDepPadre;
                        orimaedependencia.nIdeDepPadre = Convert.ToInt32(sIdDep);
                    }
                 }
                orimaedependencia.nCodDep = dependenciaview.nCodigo;
                orimaedependencia.vSigDep = dependenciaview.sSiglas;
                orimaedependencia.vBanSel = dependenciaview.nSeleccion;

                DateTime dtFecIniVig = FormUtils.formatearFecha(dependenciaview.dtFecInic, "dd/MM/yyyy");
                orimaedependencia.dtFecIniVig = dtFecIniVig;
                if (!string.IsNullOrEmpty(dependenciaview.dtFecFin))
                {
                    DateTime dtFecFinVig = FormUtils.formatearFecha(dependenciaview.dtFecFin, "dd/MM/yyyy");
                    orimaedependencia.dtFecFinVig = dtFecFinVig;
                }
                orimaedependencia.dtFecReg = DateTime.Now;

                string idDep = Request["iddep"];
                if (!string.IsNullOrEmpty(idDep))
                {
                    //Actualización de la dependencia
                    int intIdDep = Int32.Parse(idDep);
                    orimaedependencia.nIdeDep = intIdDep;
                    if (orimaedependencia.nIdeTipoDep == _ID_COMPENDIO_TIPO_REGION)
                    {
                        orimaedependencia.nIdeDepRegion = intIdDep;
                        orimaedependencia.nIdeDepPadre = null;
                    }
                    db.ORIMaeDependencia.Attach(orimaedependencia);
                    db.ObjectStateManager.ChangeObjectState(orimaedependencia, EntityState.Modified);
                    ViewBag.Mensaje = "Dependencia Satisfactoriamente actualizada.";
                    ViewBag.idmensaje = 2;
                    db.SaveChanges();
                } else {
                    //Insercion de la dependencia
                    DependenciaHelper dependenciaHelper = new DependenciaHelper();
                    decimal nNumDependencia = dependenciaHelper.getIdDependencia();
                    orimaedependencia.nIdeDep = nNumDependencia;
                    if (orimaedependencia.nIdeTipoDep == _ID_COMPENDIO_TIPO_REGION)
                    {
                        //orimaedependencia.nIdeDepRegion = nNumDependencia;
                        orimaedependencia.nIdeDepPadre = null;
                    }
                    db.ORIMaeDependencia.AddObject(orimaedependencia);
                    ViewBag.Mensaje = "Dependencia Satisfactoriamente ingresada.";
                    ViewBag.idmensaje = 1;
                    db.SaveChanges();

                    if (orimaedependencia.nIdeTipoDep == _ID_COMPENDIO_TIPO_REGION)
                    {
                        //orimaedependencia.nIdeDepRegion = nNumDependencia;
                        //dependenciaHelper.updateDependenciaRegion(nNumDependencia);
                    }
                }
                return RedirectToAction("Create/" + ViewBag.idmensaje);
            }

            HtmlUtils htmlUtils = new HtmlUtils();
            ViewBag.nIdeTipoDep = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento");
            ViewBag.nIdeDepPadre = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
            ViewBag.nIdeDepRegion = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
            ViewBag.CategoriaDependencia = htmlUtils.getComboCategoriaDependencia();
            var list = new SelectList(new[]
                                      {
                                          new{ID="1",Name="SI"},
                                          new{ID="0",Name="NO"},
                                      }, "ID", "Name", "S");
            ViewBag.List = list;

            return View(dependenciaview);
        }

        //
        // GET: /Dependencias/Search

        public ActionResult Search()
        {
            HtmlUtils htmlUtils = new HtmlUtils();
            DependenciaHelper helper = new DependenciaHelper();
            ViewBag.nIdeTipoDep = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento");
            ViewBag.nIdeDepPadre = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
            ViewBag.nIdeDepRegion = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion");
            ViewBag.CategoriaDependencia = htmlUtils.getComboCategoriaDependencia();
            ViewBag.DepRegion = htmlUtils.getComboDependenciaRegion();
            var list = new SelectList(new[]
                                      {
                                          new{ID="1",Name="SI"},
                                          new{ID="0",Name="NO"},
                                      }, "ID", "Name", "S");
            ViewBag.List = list;
            return View();
        }

        public ActionResult Consultar()
        {
            DependenciaHelper helper = new DependenciaHelper();
            String strSearch = Request["search"];
            String strIndHijos = Request["indhijos"];
            //IEnumerable list = null;
            List<Dependencia> listDependencia = null;
            if (strSearch.IndexOf("<") != -1)
            {
                int posInic = strSearch.IndexOf("<");
                int posFin = strSearch.LastIndexOf("-");
                int dif = posFin - posInic;
                String strIdDep = strSearch.Substring(posInic + 1, dif - 1);
                int iddep = Int32.Parse(strIdDep);
                if (strIndHijos == "S")
                {
                    //list = db.ORIMaeDependencia.Where<ORIMaeDependencia>(o => o.nIdeDepPadre == iddep).ToList();
                    listDependencia = helper.getDetalleDependenciaPadreList(iddep);
                }
                else {
                    //list = db.ORIMaeDependencia.Where<ORIMaeDependencia>(o => o.nIdeDep == iddep).ToList();
                    listDependencia = helper.getDetalleDependenciaUnicaList(iddep);
                }
                
            }
            else {
                //list = db.ORIMaeDependencia.Where<ORIMaeDependencia>(o => o.vDescripcion.Contains(strSearch)).ToList();
                listDependencia = helper.getDetalleDependenciaConsultaList(strSearch);
            }
            return View(listDependencia);
        }
        
        //
        // GET: /Dependencias/Edit/5
 
        public ActionResult Edit(decimal id)
        {
            ORIMaeDependencia orimaedependencia = db.ORIMaeDependencia.Single(o => o.nIdeDep == id);
            ViewBag.nIdeTipoDep = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento", orimaedependencia.nIdeTipoDep);
            ViewBag.nIdeDepPadre = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion", orimaedependencia.nIdeDepPadre);
            ViewBag.nIdeDepRegion = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion", orimaedependencia.nIdeDepRegion);
            return View(orimaedependencia);
        }

        //
        // POST: /Dependencias/Edit/5

        [HttpPost]
        public ActionResult Edit(ORIMaeDependencia orimaedependencia)
        {
            if (ModelState.IsValid)
            {
                db.ORIMaeDependencia.Attach(orimaedependencia);
                db.ObjectStateManager.ChangeObjectState(orimaedependencia, EntityState.Modified);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.nIdeTipoDep = new SelectList(db.ORIDetCompendio, "nIdeDetalle", "vCodElemento", orimaedependencia.nIdeTipoDep);
            ViewBag.nIdeDepPadre = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion", orimaedependencia.nIdeDepPadre);
            ViewBag.nIdeDepRegion = new SelectList(db.ORIMaeDependencia, "nIdeDep", "vDescripcion", orimaedependencia.nIdeDepRegion);
            return View(orimaedependencia);
        }

        //
        // GET: /Dependencias/Delete/5
 
        public ActionResult Delete(decimal id)
        {
            ORIMaeDependencia orimaedependencia = db.ORIMaeDependencia.Single(o => o.nIdeDep == id);
            return View(orimaedependencia);
        }

        //
        // POST: /Dependencias/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(decimal id)
        {            
            ORIMaeDependencia orimaedependencia = db.ORIMaeDependencia.Single(o => o.nIdeDep == id);
            db.ORIMaeDependencia.DeleteObject(orimaedependencia);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }

        public ViewResult Regions()
        {
            HtmlUtils htmlUtils = new HtmlUtils();
            ViewBag.DepRegion = htmlUtils.getComboDependenciaRegion();
            return View();
        }

        public ViewResult AutoComplete()
        {
            int idRegion = Int32.Parse(Request["idRegion"]);
            String reg = Request["idRegion"];
            String textoreg = "dataDependencia";
            String strData;
            strData = textoreg;
            ViewBag.campo = strData;
            IEnumerable list = null;
            //list = db.ORIMaeDependencia.Where<ORIMaeDependencia>(o => o.nIdeDepRegion == idRegion).ToList();
            list = db.ORIMaeDependencia.ToList();
            return View(list);
        }

        public ViewResult Codigos()
        {
            int idDepPadre = Int32.Parse(Request["idDepPadre"]);
            IEnumerable list = null;
            if (idDepPadre > 0)
            {
                list = db.ORIMaeDependencia.Where<ORIMaeDependencia>(o => o.nIdeDepPadre == idDepPadre || o.nIdeDep == idDepPadre).ToList();
            }
            else {
                int idTipoDep = Int32.Parse(Request["idTipoDep"]);
                list = db.ORIMaeDependencia.Where<ORIMaeDependencia>(o => o.nIdeTipoDep == idTipoDep).ToList();
            }
            return View(list);
        }

        public ViewResult All()
        {
            ViewBag.campo = "dataDependencia";
            IEnumerable list = null;
            list = db.ORIMaeDependencia.Where<ORIMaeDependencia>(o => o.nIdeDep > 0).Take(50).ToList();
            return View(list);
        }

    }
}